using Gtk;
using NHibernate;
using NHibernate.Cfg;
using System;
using System.Collections;

namespace PNhibernate
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			Application.Init ();
			
			Configuration configuration= new Configuration();
			configuration.Configure();
			
			configuration.AddAssembly("PNhibernate");
			
			//---- CREACIÓN DE LA "SessionFactory" ----
			ISessionFactory sessionFactory= configuration.BuildSessionFactory();
			
			//---- INICIO DE SESIÓN ----
			ISession session= sessionFactory.OpenSession();
			
			//---- CARGA DE UN OBJETO ----
//			Categoria categoria= session.Load<Categoria>(2L);
			
			//---- MODIFICA UN DATO ----
//			categoria.Nombre= "categoria " + DateTime.Now;
			
			//---- CREA UN OBJETO ----
//			Categoria categoria= new Categoria();
//			categoria.Nombre= "categoria " + DateTime.Now;
			
			//---- GUARDA UN OBJETO ----
//			session.Save(categoria);
//			session.Flush();
			
			//---- EJECUCIÓN DE CUNSULTA ----
			IQuery query= session.CreateQuery("from Categoria");
			IList list= query.List();
			
//			foreach(Categoria categoria in list)
//				Console.WriteLine("categoria.Nombre={0}", categoria.Nombre);
			
			query= session.CreateQuery("from Articulo");
			list= query.List();
			
			foreach(Articulo articulo in list) {
				Console.WriteLine("articulo.Id={0}", articulo.Id);
				Console.WriteLine("articulo.Nombre={0}", articulo.Nombre);
				Console.WriteLine("articulo.Precio={0}", articulo.Precio);
				Console.WriteLine("articulo.Categoria={0}\n", articulo.Categoria);
			}
			
			//---- CIERRE DE SESIÓN ----
			session.Close();
			
			//---- CIERRE DE LA "SessionFactory" ----
			sessionFactory.Close();
			
			MainWindow win = new MainWindow ();
			win.Show ();
			Application.Run ();
		}
	}
}
